﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PetSystem
{
    public partial class frmListaItens : Form
    {
        public frmListaItens()
        {
            if (Text == "Lista de Planos")
            {
                DAO planoDAO = new DAO();
                dgListaItens.DataSource = planoDAO.listaPlanos();
                dgListaItens.Refresh();
            }
            if (Text == "Lista de Clientes")
            {
                DAO clienteDAO = new DAO();
                dgListaItens.DataSource = clienteDAO.listaClientes();
                dgListaItens.Refresh();
            }
            if (Text == "Lista de Animais")
            {
                DAO animalDAO = new DAO();
                dgListaItens.DataSource = animalDAO.listaAnimais();
                dgListaItens.Refresh();
            }
            InitializeComponent();
        }

        private void btnFechar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void frmListaItens_Load(object sender, EventArgs e)
        {
            if (Text == "Lista de Planos")
            {
                DAO DAO = new DAO();
                dgListaItens.DataSource = DAO.listaPlanos();
                dgListaItens.Refresh();
            }
            if (Text == "Lista de Clientes")
            {
                DAO DAO = new DAO();
                dgListaItens.DataSource = DAO.listaClientes();
                dgListaItens.Refresh();
            }
            if (Text == "Lista de Animais")
            {
                DAO DAO = new DAO();
                dgListaItens.DataSource = DAO.listaAnimais();
                dgListaItens.Refresh();
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            if (Text == "Lista de Planos")
            {
                if (Application.OpenForms.OfType<frmPlanos>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmPlanos>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de cadastrar um novo plano é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    frmPlanos Formularioplano = new frmPlanos();
                    Formularioplano.MdiParent = this.ParentForm;
                    Formularioplano.Text = "Novo Plano";
                    Formularioplano.Show();
                }
            }
            if (Text == "Lista de Clientes")
            {
                if (Application.OpenForms.OfType<Cliente>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<Cliente>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de cadastrar um novo cliente é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    Cliente FormularioCliente = new Cliente();
                    FormularioCliente.MdiParent = this.ParentForm;
                    FormularioCliente.Text = "Novo Cliente";
                    FormularioCliente.Show();
                }
            }
            if (Text == "Lista de Animais")
            {
                if (Application.OpenForms.OfType<frmAnimais>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmAnimais>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de cadastrar um novo animal é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    frmAnimais Formularioplano = new frmAnimais();
                    Formularioplano.MdiParent = this.ParentForm;
                    Formularioplano.Text = "Novo Animal";
                    Formularioplano.Show();
                }
            }
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (Text == "Lista de Planos")
            {
                if (dgListaItens.SelectedRows != null)
                {
                    DAO DAO = new DAO();
                    try
                    {
                        DAO.ExcluirPlano(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                        MessageBox.Show("Plano excluído!");
                    }
                    catch (Exception ex)
                    {
                        #region Tratamento de erro ao excluir animal
                        string mensagem;
                        if (ex.Message.ToString().Contains("registros relacionados"))
                        {
                            mensagem = "Você não pode apagar esse plano pois ele já está associado ao cadastro de um Cliente.";
                        }
                        else
                        {
                            mensagem = ex.Message.ToString();
                        }
                        MessageBox.Show("Erro ao excluir plano:\n\n " + mensagem, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        #endregion
                    }
                    dgListaItens.DataSource = DAO.listaPlanos();
                }
            }
            if (Text == "Lista de Clientes")
            {
                if (dgListaItens.SelectedRows != null)
                {
                    DAO DAO = new DAO();
                    DAO.ExcluirCliente(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    MessageBox.Show("Cliente excluído!");
                    dgListaItens.DataSource = DAO.listaClientes();
                }
            }
            if (Text == "Lista de Animais")
            {
                if (dgListaItens.SelectedRows != null)
                {
                    DAO DAO = new DAO();
                    try
                    {
                        DAO.ExcluirAnimal(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                        MessageBox.Show("Animal excluído!");
                    }
                    catch (Exception ex)
                    {
                        #region Tratamento de erro ao excluir animal
                        string mensagem;
                        if (ex.Message.ToString().Contains("registros relacionados"))
                        {
                            mensagem = "Você não pode apagar esse animal pois ele já está associado ao cadastro de um Cliente.";
                        }
                        else
                        {
                            mensagem = ex.Message.ToString();
                        }
                        MessageBox.Show("Erro ao excluir animal:\n\n " + mensagem, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                        #endregion
                    }
                    dgListaItens.DataSource = DAO.listaAnimais();
                }
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (Text == "Lista de Planos")
            {
                if (Application.OpenForms.OfType<frmPlanos>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmPlanos>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.ObterPlano(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    frmPlanos Formularioplano = new frmPlanos();
                    Formularioplano.MdiParent = this.ParentForm;
                    Formularioplano.Text = "Editar Plano " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    Formularioplano.Show();
                }
            }
            if (Text == "Lista de Clientes")
            {
                if (Application.OpenForms.OfType<Cliente>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<Cliente>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.ObterCliente(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    Cliente FormularioCliente = new Cliente();
                    FormularioCliente.MdiParent = this.ParentForm;
                    FormularioCliente.Text = "Editar Cliente " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    FormularioCliente.Show();
                }
            }
            if (Text == "Lista de Animais")
            {
                if (Application.OpenForms.OfType<frmAnimais>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmAnimais>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.obterAnimal(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    frmAnimais FormularioAnimal = new frmAnimais();
                    FormularioAnimal.MdiParent = this.ParentForm;
                    FormularioAnimal.Text = "Editar Animal " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    FormularioAnimal.Show();
                }
            }
        }

        public void atualizaListaDePlanos()
        {
            DAO DAO = new DAO();
            dgListaItens.DataSource = DAO.listaPlanos();
            dgListaItens.Refresh();
        }

        internal void atualizaListaDeClientes()
        {
            DAO DAO = new DAO();
            dgListaItens.DataSource = DAO.listaClientes();
            dgListaItens.Refresh();
        }

        internal void atualizaListaDeAnimais()
        {
            DAO DAO = new DAO();
            dgListaItens.DataSource = DAO.listaAnimais();
            dgListaItens.Refresh();
        }

        private void dgListaItens_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Text == "Lista de Planos")
            {
                if (Application.OpenForms.OfType<frmPlanos>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmPlanos>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.ObterPlano(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    frmPlanos Formularioplano = new frmPlanos();
                    Formularioplano.MdiParent = this.ParentForm;
                    Formularioplano.Text = "Editar Plano " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    Formularioplano.Show();
                }
            }
            if (Text == "Lista de Clientes")
            {
                if (Application.OpenForms.OfType<Cliente>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<Cliente>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.ObterCliente(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    Cliente FormularioCliente = new Cliente();
                    FormularioCliente.MdiParent = this.ParentForm;
                    FormularioCliente.Text = "Editar Cliente " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    FormularioCliente.Show();
                }
            }
            if (Text == "Lista de Animais")
            {
                if (Application.OpenForms.OfType<frmAnimais>().Count() > 0)//Verifica se o formulário já está aberto
                {
                    Form formulario = Application.OpenForms.OfType<frmAnimais>().Single(); //Obtém o formulário aberto
                    string complementoTexto = "";
                    if (formulario.Text.Contains("Novo"))
                    {
                        complementoTexto = "o cadastro";
                    }
                    else
                    {
                        complementoTexto = "a edição";
                    }
                    MessageBox.Show("Antes de editar é necessário terminar " + complementoTexto + " anterior!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                    formulario.BringToFront();//trás o formulário aberto pra frente
                }
                else
                {
                    DAO DAO = new DAO();
                    DAO.obterAnimal(dgListaItens.SelectedRows[0].Cells[0].Value.ToString());
                    frmAnimais FormularioAnimal = new frmAnimais();
                    FormularioAnimal.MdiParent = this.ParentForm;
                    FormularioAnimal.Text = "Editar Animal " + dgListaItens.SelectedRows[0].Cells[0].Value.ToString();
                    FormularioAnimal.Show();
                }
            }
        }
    }
}
